#include "common.hpp"
#include "log.hpp"

int main()
{

  // logMessage(Info, "serve is good error sataus: %s, error code: %d", strerror(errno), errno);

  // cout << sum(1, "%d", 10) << endl;
  // cout << sum(2, "%d %d %d", 1, 2) << endl;
  // cout << sum(3, "%d %d %d", 1, 2, 3) << endl;

  // 创建一个日志打印对象
  Log log;
  // log.Enable(Onefile);
  // log.Enable(Classfile);

  // 利用对象的生命周期来管理创建和删除命名管道文件
  Init init;

  // 打开管道文件 若客户端不执行文件，会open阻塞
  int fd = open(FILE_NAME, O_RDONLY);
  if (fd == -1)
  {
    // perror("open");
    // log.logMessage(Info, "server open file done, errno status: %s, errno code: %d\n", strerror(errno), errno);
    log(Info, "server open file done, errno status: %s, errno code: %d\n", strerror(errno), errno);

    exit(FILE_OPEN_ERR);
  }

  // 测试打印一些日志信息
  // log.logMessage(Info, "server is normal, errno status: %s, errno code: %d\n", strerror(errno), errno);
  // log.logMessage(Warning, "server is warning, errno status: %s, errno code: %d\n", strerror(errno), errno);
  // log.logMessage(Error, "server is error, errno status: %s, errno code: %d\n", strerror(errno), errno);
  // log.logMessage(Fatal, "server is Fatal, errno status: %s, errno code: %d\n", strerror(errno), errno);

  // 使用重载的operator()打印
  log(Info, "server is normal, errno status: %s, errno code: %d\n", strerror(errno), errno);
  log(Warning, "server is warning, errno status: %s, errno code: %d\n", strerror(errno), errno);
  log(Error, "server is error, errno status: %s, errno code: %d\n", strerror(errno), errno);
  log(Fatal, "server is Fatal, errno status: %s, errno code: %d\n", strerror(errno), errno);

  // 开始通信
  while (true)
  {
    char buffer[1024] = {0};

    int rd = read(fd, buffer, sizeof(buffer));
    if (rd > 0)
    {
      buffer[rd] = 0;
      cout << "Serve hear@ " << buffer << endl;
    }
    else if (rd == 0)
    {
      // cout << "client quit , and me too" << endl;
      log.logMessage(Debug, "client quit, server too, errno status: %s, errno code: %d\n", strerror(errno), errno);
      break;
    }
    else
      break;
  }

  // 关闭管道文件
  close(fd);

  return 0;
}
